Johdanto R-ohjelmointiin

author: Yliopistonlehtori, FT Juho Kopra #date: 8.9.2021 autosize: true

Kurssin oppimistavoitteet

Mitä R:llä voi tehdä?

Mitä muuta? - R-paketteja - raportteja, kirjoja, luentokalvoja - verkkosivuja

Miksi R:ää kannattaa opiskella?

Erilaisia R-ohjelmointiympäristöjä

left: 50% - RGui


RStudion esittely

Laskeminen R:llä

left: 50% - R toimii laskukoneena

1+6
[1] 7
2-3
[1] -1
2*3
[1] 6

5/7
[1] 0.7142857
4^2
[1] 16

Ohjelmointi on toimintaohjeiden antamista tietokoneelle:

Kreikkalainen jogurttidippi (Tzatsiki)

  1. Raasta puolikas kurkku
  2. Purista kurkkuraasteesta ylimääräinen neste pois
  3. Kuori ja silppua 1-2 valkosipulin kynttä
  4. Sekoita 0.5 litraan kreikkalaista jogurttia kurkku, valkosipuli ja mausteet
  5. Anna maustua jääkaapissa 20 minuuttia
  6. Tarjoile

Perusasioita ohjelmoinnista:

Perustyökalut

left: 50% - koodia kirjoitetaan koodieditorilla (RStudio) - koodia voidaan ajaa suoraan R-komentokehotteessa (console) + komentokehotteessa oleva väkänen > tarkoittaa, että komentokehote on valmis vastaanottamaan koodia (komentoja) + komentokehote tulkitsee koodin (laskutoimituksen) ja palauttaa lopputuloksen


Aritmetiikkaa R:llä

1+6
[1] 7
5/7
[1] 0.7142857

Virheitä koodissa?

left: 50% - tietokone ymmärtää vain täsmälleen oikein annettuja komentoja, joten yksikin väärä merkki koodissa aiheuttaa ongelmia! + tietokone ei osaa tulkita monimerkityksiä


3 + "four"
Error in 3 + "four" : non-numeric argument to binary operator

Miten koodia kehitetään?

  1. Jos koodi on pitkä, niin suunnittele koodin osaset
  2. Aloita kirjoittamalla pieni pätkä koodia.
  3. Kokeile, toimiiko kirjoittamasi koodi.
  4. Jos ei toimi halutulla tavalla, tai tulee virheilmoitus, selvitä vian syy.
    • Millä rivillä virhe on koodissa?
    • Mikä funktio ja muuttuja aiheuttaa virheen?
  5. Korjaa vika. (Tähän saattaa mennä paljonkin aikaa.)
  6. Siirry seuraavaan koodin pätkään ja jatka iterointia kohdasta 2.

Mistä ohjelmakoodi muodostuu?

x <- c(1,2,3)
mean(x) # lasketaan keskiarvo
[1] 2

Muuttujat

cats <- 3
dogs  <- 4
cats + dogs
[1] 7
paste("My friend has",cats + dogs, "animals.")
[1] "My friend has 7 animals."
paste("My friend has",cats + dogs, "animals."
      )
[1] "My friend has 7 animals."

Muuttujat

left: 50% - muuttujien tyypit

class(cats)
[1] "numeric"
# boolean variable
var_bool <- TRUE
var_bool
[1] TRUE
class(var_bool)
[1] "logical"

var_char <- "this is text"
class(var_char)
[1] "character"

Vektorit

Muuttujan muuttaminen faktoriksi

# numeric variable
var_num <- c(42.1,11.2,31)
class(var_num)
[1] "numeric"
# factor variable (categorical)
var_fact <- factor(c(0,1,1,0,0))
class(var_fact)
[1] "factor"

Funktiot

summary(var_num)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  11.20   21.10   31.00   28.10   36.55   42.10 
summary(var_fact)
0 1 
3 2 

Lisää faktoreista

animals <- factor(c(0,1,1,0,0),labels=c("cat","dog"))
class(animals)
[1] "factor"
summary(animals)
cat dog 
  3   2 
animals <- factor(c("cat","dog","dog","cat","cat"))
class(animals)
[1] "factor"
summary(animals)
cat dog 
  3   2 

Funktiot

left: 50% - osa ohjelmointikielen toiminnallisuuksista on funktioiden muodossa - funktioilla on lähtökohtaisesti sama idea kuin funktioilla matematiikassa + R:ssä on valmiina lukuisia eri funktiota

exp(3) # eksponenttifunktio exp()
[1] 20.08554

Funktiot ja tiedonhaku

Funktiot ja tiedonhaku

Funktiot

seq(1,3,0.5)
[1] 1.0 1.5 2.0 2.5 3.0
seq(from=1,to=3,by=0.5) # sama, mutta argumentit nimetty
[1] 1.0 1.5 2.0 2.5 3.0
seq(from=1,to=3,length.out=6) # by-argumenttia ei käytetä, joten on pakko nimetä length.out-argumentti
[1] 1.0 1.4 1.8 2.2 2.6 3.0

Funktiot

k <- seq(1,3,0.5)
k
[1] 1.0 1.5 2.0 2.5 3.0

Muuttujat argumentteina

left: 50% - muistissa olevia muuttujia voi käyttää funktion argumentteina (operaattorina yhtäsuuruusmerkki “=”)

numbers <- c(1,2,3,4)
mean(x=numbers)
[1] 2.5
mean(x=c(1,2,3,4))
[1] 2.5

mean(numbers)
[1] 2.5
mean(c(1,2,3,4))
[1] 2.5

Operaattorit

x <- 5.2
y <<- 7.44 #harvinainen, mutta Rcourse -paketti pyytää tätä joskus
x2 = 5.3 # toimii myös, mutta ei suositella

x
[1] 5.2
y
[1] 7.44
x2
[1] 5.3

Operaattorit

left: 50% - vertailuoperaattorit <=,<, ==, !=, >, >=

3 <= 4 # onko 3 pienempi tai yhtä suuri kuin 4 ?
[1] TRUE
5 < 4  # onko 5 pienempi kuin 4 ?
[1] FALSE
3.01 == 3 # onko 3.01 yhtä suuri kuin 3 ?
[1] FALSE

3 != 4 # onko 3 eri suuri kuin 4?
[1] TRUE
5 > 4  # onko 5 pienempi kuin 4 ?
[1] TRUE
3 >= 4 # onko 3 suurempi tai yhtä suuri kuin 4 ?
[1] FALSE

Kommentit

# Kommentin tarkoitus on kertoa, mitä koodi tekee.
x <- 1:10 # Create a vector with values from one to ten.

Kommentit

# R-programming: examples to students, Juho Kopra, University of Eastern Finland
#-----------------------------------------------------
# new section of the code starts

Alkeistietotyypit ja tietotyypit

Alkeistietotyypit

Hieman lisää alkeistietotyypeistä

left: 50% - character eli merkkijono

var_char <- "this is text"
class(var_char)
[1] "character"

Alkeistietotyyppien erikoisarvot


    x <- c(1,2,Inf)
    is.finite(x)
[1]  TRUE  TRUE FALSE

Tietotyypit

Vektori

values <- c(1.1,3.1,2.5)
text <- c("cat","dog","animal")
named_vector <- c("first"=1,"second"=2)
named_vector
 first second 
     1      2 

Datakehikko

dat <- data.frame(values = c(1.1,3.1,2.5), text = c("cat","dog","animal"))
dat
  values   text
1    1.1    cat
2    3.1    dog
3    2.5 animal

Hieman lisää tietotyypeistä

Lista

left: 50% - list lista on luettelo, joka sallii eri tyyppisten objektien säilömisen + listan osioilla voi olla nimi, mutta ei ole pakko

l <- list("a"=c(1,2),"b"=dat)
l
$a
[1] 1 2

$b
  values   text
1    1.1    cat
2    3.1    dog
3    2.5 animal

l[[2]]
l[2]
$b
  values   text
1    1.1    cat
2    3.1    dog
3    2.5 animal

Matriisi

vec <- c(1,2,3,4,5,6)
matrix(vec,nrow=2,ncol=3)
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

Array

ar <- array(data=1:27,dim=c(3,3,3))
ar # uses three indices
, , 1

     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

, , 2

     [,1] [,2] [,3]
[1,]   10   13   16
[2,]   11   14   17
[3,]   12   15   18

, , 3

     [,1] [,2] [,3]
[1,]   19   22   25
[2,]   20   23   26
[3,]   21   24   27

ar[,,1]
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9